热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析C++中的String和Vector

本文详细介绍了C++编程语言中String和Vector的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。

前言:本文由编程笔记编辑团队精心整理,旨在为读者提供关于 C++ 中 String 和 Vector 的深入理解,以提升编程技能。



String 类型详解


在 C++ 中,string 类位于标准库 内,并且属于 std 命名空间。string 是一种特殊的类,用于处理文本字符串。


可以使用等号 "=" 对 string 对象进行赋值操作,也可以使用加号 "+" 来拼接两个 string 对象。无需担心目标 string 是否有足够的空间来存储新的值,因为 C++ 会自动管理这些细节。此外,可以直接使用关系运算符(如 <, >, ==, != 等)来比较两个 string 对象的值。


string phrase; // 创建一个空的 string 对象
string noun("ants"); // 使用字符串常量初始化 string 对象
string noun = "ants"; // 同上,但使用了不同的语法形式

当使用 >> 运算符从标准输入读取 string 时,它会在遇到第一个空白字符时停止。若需读取包含空格的整行文本,应使用 getline 函数。


getline(cin, str); // 读取一行文本
getline(cin, str, '?'); // 读取至 '?' 字符为止,'?' 将被读取并丢弃

getline 函数的返回值不是 void,而是引用了第一个参数,这使得可以在链式调用中使用 getline。


getline(cin, s1) >> s2 == getline(cin, s1); cin >> s2;

每个 string 对象都提供了 length 成员函数,用于获取字符串的实际长度。使用方括号 "[]" 访问 string 中的字符不会进行越界检查,但可以通过成员函数 at 实现安全的访问。


str[6] == str.at(6)

对于 C 风格的字符串操作函数(如 strcpy),它们不接受 C++ 的 string 对象作为参数。若要使用这些函数,需要先通过 c_str 成员函数将 string 转换为 C 风格的字符串。


char carr[] = "test"; // C 风格的字符串
string s = "test"; // C++ 的 string 对象
strcpy(carr, s.c_str()); // 正确的转换方式



Vector 容器解析


vector 容器类似于传统的数组,但具有动态调整大小的能力,是 C++ STL(标准模板库)的重要组成部分。


vector v; // 定义一个空的整数 vector

vector 是一个模板类,这意味着它可以用来创建任何类型的容器,例如 vector 表示一个整数类型的 vector。声明时调用了 vector 的默认构造函数,初始化了一个空的 vector 对象。


可以使用 "[]" 下标操作符访问 vector 中的元素。与数组不同,"[]" 只能用于修改已存在的元素,不能用于初始化新元素。向 vector 添加新元素时,通常使用 push_back 方法,该方法会将新元素添加到 vector 的末尾。


vector a;
a.push_back(1);
a.push_back(10);
a.push_back(101);

vector 支持使用赋值运算符 "=" 进行整体复制。vector 的大小(即元素数量)可以通过 size 成员函数获取,其返回值类型为 unsigned int。


vector 提供了一个带参数的构造函数,可以初始化指定数量的元素。对于复杂类型的元素,构造函数会调用该类型的默认构造函数来初始化这些元素。


vector v(10); // 初始化 10 个元素,全部设置为 0
vector v;
for (unsigned int i = 0; i <10; i++) {
v[i] = i; // 只能在声明后立即执行
}

vector 的定义位于标准库 中,并使用 std 命名空间。尝试访问超出 vector 当前大小的元素不会引发编译错误,但会导致未定义行为。


vector 的容量(capacity)是指其当前分配的内存空间能够存储的最大元素数量,可以通过 capacity 成员函数查询。当 vector 的容量不足以容纳更多元素时,它会自动扩展。也可以通过 reserve 成员函数手动增加 vector 的容量。


v.reserve(32); // 设置容量至少为 32 个元素
v.reserve(v.size() + 10); // 设置容量至少比当前大小多 10 个元素

需要注意的是,reserve 方法只能增加 vector 的容量,而不能减少。如果需要改变 vector 的大小,可以使用 resize 成员函数。resize 方法在增加大小时会使用元素类型的默认构造函数初始化新元素,在减少大小时会删除多余的元素。


推荐阅读
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
  • 本文深入探讨了WPF框架下的数据验证机制,包括内置验证规则的使用、自定义验证规则的实现方法、错误信息的有效展示策略以及验证时机的选择,旨在帮助开发者构建更加健壮和用户友好的应用程序。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
author-avatar
陈旺财九_999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有